package modele;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.StringTokenizer;

public class Attribute_Data {
	private String nom;
	private HashMap<String, ArrayList<String>> listeAttribute;
	private HashMap<String, ArrayList<String>> listeData;
	
	public Attribute_Data()
	{
		this.nom = "";
		this.listeAttribute = new HashMap<String, ArrayList<String>>();
		this.listeData = new HashMap<String, ArrayList<String>>();
	}

	public Attribute_Data(String fichier)
	{
		this.nom = "";
		this.listeAttribute = new HashMap<String, ArrayList<String>>();
		this.listeData = new HashMap<String, ArrayList<String>>();
		this.loadFile(fichier);
	}

	public Attribute_Data(String nomGraphe, String fichier)
	{
		this.nom = nomGraphe;
		this.listeAttribute = new HashMap<String, ArrayList<String>>();
		this.listeData = new HashMap<String, ArrayList<String>>();
		this.loadFile(fichier);
	}
	
	private void loadFile(String fichier)
	{
		try
		{
			BufferedReader input = new BufferedReader(new FileReader(fichier));
			try
			{
				String line = null;
				while ( ((line = input.readLine()) != null))
				{
					//System.out.println("la ligne: "+line);
					if(line != null) {
						StringTokenizer token = new StringTokenizer(line," {,{");
						if(token.hasMoreTokens()) {
							String first = token.nextToken();
							//System.out.println("le mot: "+first);
							if ( first.equals("@attribute"))
							{
								String name = token.nextToken();
								ArrayList<String> listeAttribut = new ArrayList<String>();
								while(token.hasMoreTokens()) {
									listeAttribut.add(token.nextToken());
								}
								listeAttribute.put(name, listeAttribut);
							}
						}
					}
				}
			} finally
			{
				input.close();
			}
			
			System.out.println("je suis la");
			for(String nameAttribut : listeAttribute.keySet()) {
				listeData.put(nameAttribut, new ArrayList<String>());
			}
			
			// On ouvre un pointer sur fichier
			BufferedReader inputF = new BufferedReader(new FileReader(fichier));
			try
			{
				String line = null;
				boolean parcour = false;
				// On parcours toutes les lignes
				while ((line = inputF.readLine()) != null)
				{
					System.out.println("la ligne :"+line);
					StringTokenizer token = new StringTokenizer(line, ",");
					if(token.hasMoreTokens()) {
						if(parcour == true) {
							int index = 0;
							while(token.hasMoreTokens()) {
								listeData.get(index).add(token.nextToken());
								index++;
							}
						}
						String firstToken = token.nextToken();
						if (firstToken.equals("@data"))
						{
							parcour = true;			
						}
					}
				}
			} finally
			{
				inputF.close();
			}
		} catch (IOException ex)
		{
			System.err.println("Erreur Graphe:loadFile(" + fichier + "):" + ex.getMessage());
			Affichage.afficher("Erreur Graphe:loadFile(" + fichier + "):" + ex.getMessage());
		}
		
		System.out.println("la liste des attributs: "+listeAttribute);
		System.out.println("la liste des données: "+listeData);
	}
	
	public String getNom() {
		return nom;
	}
	public void setNom(String nom) {
		this.nom = nom;
	}

	public HashMap<String, ArrayList<String>> getListeAttribute() {
		return listeAttribute;
	}

	public void setListeAttribute(HashMap<String, ArrayList<String>> listeAttribute) {
		this.listeAttribute = listeAttribute;
	}

	public HashMap<String, ArrayList<String>> getListeData() {
		return listeData;
	}

	public void setListeData(HashMap<String, ArrayList<String>> listeData) {
		this.listeData = listeData;
	}
}
